/*
* In the name of God
*
* Author: Farbod Doost
* Last Modified: Thu, 09 Mar 2023 (04:29:26)
*
*/
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n;
vector <int> adj[N];
bool vis[N];
int dp[N], b[N];
void dfs(int v, int p)
{
dp[v] = 1;
for (auto u: adj[v])
if (u != p && !vis[u])
dfs(u, v), dp[v] += dp[u];
return;
}
int get(int v, int p, int sz)
{
for (auto u: adj[v]) {
if (u == p || vis[u])
continue;
if (dp[u] > sz / 2)
return get(u, v, sz);
}
return v;
}
void cent(int v = 0, int p = -1)
{
dfs(v, -1);
v = get(v, -1, dp[v]);
vis[v] = 1;
if (p == -1)
b[v] = 0;
else
b[v] = b[p] + 1;
for (auto u: adj[v])
if (!vis[u])
cent(u, v);
return;
}
signed main()
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
cin >> n;
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v, u--, v--;
adj[u].push_back(v),
adj[v].push_back(u);
}
cent();
for (int i = 0; i < n; i++)
cout << char('A' + b[i]) << ' ';
return 0;
}
1605B - Reverse Sort | 1607C - Minimum Extraction |
1604B - XOR Specia-LIS-t | 1606B - Update Files |
1598B - Groups | 1602B - Divine Array |
1594B - Special Numbers | 1614A - Divan and a Store |
2085. Count Common Words With One Occurrence | 2089. Find Target Indices After Sorting Array |
2090. K Radius Subarray Averages | 2091. Removing Minimum and Maximum From Array |
6. Zigzag Conversion | 1612B - Special Permutation |
1481. Least Number of Unique Integers after K Removals | 1035. Uncrossed Lines |
328. Odd Even Linked List | 1219. Path with Maximum Gold |
1268. Search Suggestions System | 841. Keys and Rooms |
152. Maximum Product Subarray | 337. House Robber III |
869. Reordered Power of 2 | 1593C - Save More Mice |
1217. Minimum Cost to Move Chips to The Same Position | 347. Top K Frequent Elements |
1503. Last Moment Before All Ants Fall Out of a Plank | 430. Flatten a Multilevel Doubly Linked List |
1290. Convert Binary Number in a Linked List to Integer | 1525. Number of Good Ways to Split a String |